Ext.onReady(function(){
    /**
     * STORES
     */
    X.store({
        id     : 'editStore',

        fields : [ 'idRegistro', 'carrera', 'materia','fecha','inicio', 'fin', 'horas', 'seccion', 'ajusteInicio', 'ajusteFin', 'minutoshora' ]
    });

    /**
     * RENDERER
     */
    var dateColumnRenderer =  function(value){
        if (!value)                return '';
        //if (value instanceof Date) return value.format('d/m/Y');
        if (value instanceof Date) {
            value = value.format('d/m/Y');
            return value;
        }

        try{
            value = Date.parseDate(value, 'Y-m-d').format('d/m/Y');
            return value;
        }catch(e){try{
            value = Date.parseDate(value, 'Y-m-d H:i:s').format('d/m/Y')
            return value;
        }catch(e){
            X.msg.failure(e.message);
        }}
    }

    var hourColumnRenderer =  function(value){
        if(typeof(value) == 'string'){
            var timeDate = new Date().toDateString()+' '+value.slice(0,5);
            value = new Date(timeDate).format('H:i');
            return value;
        }
        return value;
    }


    /**
     * LISTENERS
      */
    var finEdit=new X.form.time({
        minValue : '6:00 AM',
        maxValue : '11:00 PM',
        format   : 'H:i',
        increment: 1
    })

    var iniEdit=new X.form.time({
        minValue : '6:00 AM',
        maxValue : '11:00 PM',
        format   : 'H:i',
        increment: 1
    })

    var changeHora = function( field, newValue, oldValue ){
        var grid= X.get('editGrid');
        var a=grid.getSelectionModel().getSelected();
        var ini=a.get('ajusteInicio');
        var fin = a.get('ajusteFin');

        if(!ini || !fin){
            a.get('horas')=0;

        }
        else{
            var minutos_hora=X.get('editStore').getAt(0).get('minutoshora');
            var hIni  = 60*parseInt(ini.substr(0,2),10)+parseInt(ini.substr(3,5),10);
            var hFin  = 60*parseInt(fin.substr(0,2),10)+parseInt(fin.substr(3,5),10);
            //a.get('horas')= Math.floor((hFin-hIni)/horas_carrera);

            a.set('horas',(hFin-hIni)/minutos_hora);
        }
    };

    finEdit.addListener('change',changeHora);
    finEdit.addListener('select',changeHora);

    iniEdit.addListener('change',changeHora);
    iniEdit.addListener('select',changeHora);


    /**
     * GRID
     */

    var colModel = new Ext.grid.ColumnModel({
        defaults: {
            menuDisabled: true
        },
        columns: [
            {header: 'Fecha', dataIndex: 'fecha', width : 85},
            {header: 'Sección', dataIndex: 'seccion', width : 65},
            {header: 'Materia', dataIndex: 'materia', width : 180},
            {header: 'Entrada', dataIndex: 'inicio', width : 65},
            {header: 'Salida', dataIndex: 'fin', width : 65},
            {header: 'Horas', dataIndex: 'horas', width : 60},
            /*{header: 'Horas Total', dataIndex: 'horascatedra', width : 60},*/
            {header: 'Ajuste Entrada', dataIndex: 'ajusteInicio', width : 95,
                editor: iniEdit
            },
            {header: 'Ajuste Salida', dataIndex: 'ajusteFin', width : 95,
                editor: finEdit
            }

        ]
    });

    var editor = X.grid.editor({
        id          : 'editGrid',
        height      : 190,
        width       : 730,
        cm          : colModel,
        storeId     : 'editStore',
        x           : 0,
        y           : 0
    });

    editor.addListener('click',changeHora);


    var formEdit = X.form.panel({
        id     : 'editForm',
        height : 240,
        width  : 750,
        items  : [
            X.form.hidden ({id:'editorRows'}),
            X.form.button ({x:510, y:200, width:100, id:'editCargar',  text:'Conflictos Resueltos'}),
            X.form.button ({x:630, y:200, width:80, id:'editCancelar',  text:'Cancelar'}),
            X.get('editGrid')
        ]
    });


    /**
     * HANDLERS BOTONES
      */
    X.event.button('editCancelar', function(){
        X.get('editWindow').close();
        window.location = '/registro/profesor';
    });

    X.event.button('editCargar', function(){
        var store = X.get('editStore');
        var rowCount = store.getCount();

        var detail = new Array();
        var ids = new Array();
        for (var i=0; i<rowCount; i++){
            var record = store.getAt(i);

            var data = {idRegistro:'',inicio:'',fin:'',ajusteInicio:'',ajusteFin:'',minutoshora:'',horascatedra:''};
            data.idRegistro=record.get('idRegistro');
            data.inicio=record.get('inicio');
            data.fin=record.get('fin');
            data.ajusteInicio=record.get('ajusteInicio');
            data.ajusteFin=record.get('ajusteFin');
            data.minutoshora=record.get('minutoshora');
            data.horascatedra=record.get('horascatedra');

            detail.push(data);
            ids.push(record.get('idRegistro'));
        }

        X.ajax({
            url     : '/registro/ajax-resolver-conflictos-profesor',
            params  : {
                registros: Ext.encode(detail),
                ids: Ext.encode(ids)
            },
            afterSuccess : function(){
                X.get('editWindow').close();
                window.location = '/registro/profesor';
            }
        });

    });





    /**
     * VENTANA
     */
    X.win.panel({
        id    : 'editWindow',
        title : 'Resolver Conflictos por Profesor',
        modal : false,
        items : X.get('editForm')

    });

    X.get('editWindow').begin = function(){
        // el if para asegurar abrir una sola ventana (aunque sea modal)
        if (X.get('editWindow').isVisible()==false){
            X.get('editGrid').getSelectionModel().selectFirstRow();
            X.show('editWindow');
        }
    }
});